package com.cari.oa.service;

import com.cari.oa.dao.BaseDao;

import org.springframework.transaction.annotation.Transactional;

import java.io.Serializable;
import java.util.List;

/**
 * User: yexuhui
 * Date: 12-12-13
 * Time: 上午9:19
 */
@Transactional(rollbackFor = Exception.class)
public abstract class BaseService<E extends Serializable>{

    public abstract BaseDao<E> getDao();

    /**
     * 插入一个实体
     * @param e 实体对象
     */
    public String insert(E e) {
        return getDao().insert(e);
    }

    /**
     * 更新一个实体
     * @param e 实体对象
     */
    public void update(E e) {
        getDao().update(e);
    }

    /**
     * 删除一个实体
     * @param e 实体对象
     */
    public void delete(E e) {
        getDao().delete(e);
    }

    /**
     * 根据ID删除实体
     * @param id 实体ID
     */
    public void deleteById(String id) {
        getDao().deleteById(id);
    }

    /**
     * 根据ID获取实体
     * @param id 实体ID
     * @return 实体对象
     */
    @Transactional(readOnly = true)
    public <T> E getById(String id) {
        return getDao().getById(id);
    }

    /**
     * 获取全部实体对象
     * @return 全部实体对象
     */
    @Transactional(readOnly = true)
    public <T> List<E> getAll() {
        return getDao().getAll();
    }

    /**
     * 统计全部实体数
     * @return 总数
     */
    @Transactional(readOnly = true)
    public Long getAllCount() {
        return getDao().getAllCount();
    }

    /**
     * 判断主键为该ID的对象是否存在
     * @param id 实体对象主键
     * @return 是否存在
     */
    @Transactional(readOnly = true)
    public boolean existById(String id) {
        return getDao().existById(id);
    }
}
